/*
1 页面加载的时候
  1从缓存中获取购物车数据 渲染到页面中
    这些数据  checked=true
2 微信支付
  1 哪些人 哪些账号 可以实现微信支付
    1 企业账号
    2 企业账号的小程序后台中 必须 改开发者 添加上白名单
      1 一个appid 可以通哦是绑定多个开发者
      2 这些开发者就可以公用这个appid 和 它的开发权限
3 支付按钮
  1 先判断 缓存中有没有token
  2 没有 跳转授权页面 进行获取token
  3 有token ....
  4 获取订单编号
  5 已经完成了微信支付了
  6 手动删除缓存中 已经被选中了的商品
  7 删除后的购物车数据 填充回缓存
  8 再跳转页面

*/

import { request } from "../../request/index.js"
//这里使用ES7 的async await 需要这个,不能app.js全局使用,必须单独使用
//https://github.com/yangsuai/regeneratorRuntime
import regeneratorRuntime from '../../lib/runtime/runtime.js';

import { getSetting, chooseAddress, openSetting, showModal, showToast, requestPayment } from "../../utils/asyncWx.js"
Page({

  data: {
    address: {},
    cart: [],
    totalPrice: 0,
    totalNum: 0
  },

  onShow() {
    // 1 获取缓存中的收货地址信息
    const address = wx.getStorageSync("address");
    //1 获取缓存中的数据
    let cart = wx.getStorageSync("cart") || [];
      //过滤后购物车数组
    cart =cart.filter(v=>v.checked);
    this.setData({ address })

    // 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
      if (v.checked) {
        totalPrice += v.num * v.goods_price;
        totalNum += v.num;
      } 
    })
    this.setData({ cart, totalPrice, totalNum, address });
  },

  // 点击支付
  async handleOrderPay(){
    try{
      // 判断缓存中有没有token
      const token = wx.getStorageSync("token");
      //判断
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/index'
        })
        return;
      }

      // 创建订单
      // 准备 请求头参数
      const header = { Authorization: token };
      // 准备 请求体参数
      const order_price = this.data.totalPrice;
      const consignee_addr = this.data.address.all;
      
      const cart = this.data.cart;
      let goods = [];
      cart.forEach(v => goods.push({
        goods_id: v.goods_id,
        goods_number: v.num,
        goods_price: v.goods_price
      }))
      const orderParams = { order_price, consignee_addr, goods }
      // 准备发送请求 创建订单 获取订单编号
      const { order_number } = await request({ url: "/my/order/create", method: "POST", data: orderParams, })
      // 准备发起预支付 接口
      const { pay } = await request({ url: "/my/orders/req_unifiedorder", method: "POST",  data: { order_number } })
      //发起微信支付
      //这里返回 errMsg:requestPayment:ok 为支付成功
      const isPay = await requestPayment(pay);

      //自己定义的判断
      if (isPay.errMsg.requestPayment === "ok"){

        //查询后台  订单状态
        //会返回  支付成功  
        const res = await request({ url: "/my/orders/chkOrder", method: "POST",  data: { order_number } })
        await showToast({ title: "支付成功" });
        // 手动删除缓存中 已经支付了的商品
        let newCart = wx.getStoreageSync("cart");
        newCart = newCart.filter(v => !v.checked);
        wx.setStorageSync("cart", newCart)

        // 支付成功 跳转到订单页面
        wx - wx.navigateTo({
          url: '/pages/order/index'
        })

      }else{
        await showToast({ title: "您取消了支付" });
      }
      
    }catch(error){
      console.log(error);
      await showToast({ title: "支付失败" });
    }

  }
})


// 61课